package com.metaverse.backend.utils;

import com.metaverse.backend.domain.User;
import com.metaverse.backend.enums.AuthorityName;
import com.metaverse.backend.security.Authority;
import com.metaverse.backend.security.JwtUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

public class SecurityUtils {


    /**
     * 获取当前经过身份验证的用户信息
     *
     * 此方法用于从Spring Security的全局安全上下文中提取当前用户的详细信息
     * 它首先检查当前的Authentication对象是否可用，并确保其主体是一个JwtUser实例
     * 如果条件满足，则将该用户信息转换为JwtUser对象并返回；否则，返回null
     *
     * @return JwtUser 当前经过身份验证的用户信息，如果没有可用的用户信息，则返回null
     */
    public static JwtUser getAuthenticatedUser() {
        // 获取当前安全上下文中的身份验证信息
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        JwtUser user = null;
        // 检查身份验证信息是否可用，并确保其主体是一个JwtUser实例
        if (authentication != null && authentication.getPrincipal() instanceof JwtUser) {
            // 将身份验证信息的主体转换为JwtUser对象
            user = ((JwtUser) authentication.getPrincipal());
        }
        // 返回用户信息，可能为null
        return user;
    }

    public static boolean hasRole(AuthorityName name){
        JwtUser user = getAuthenticatedUser();
        if (null==user) {
            return false;
        }

        return user.getAuthorities().contains(Authority.get(name));
    }
}
